/*
 * 
 * 
 * 
 */
package com.hboxs.asl.entity;

import com.fasterxml.jackson.annotation.JsonValue;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.hibernate.validator.constraints.Length;
import org.springframework.web.multipart.MultipartFile;

import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.Transient;
import javax.validation.constraints.Min;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * Entity - 商品图片
 */
@Embeddable
public class ProductImage implements Serializable, Comparable<ProductImage> {

	private static final long serialVersionUID = -673883300094536107L;

	public static enum imageType {

		/** default*/
		defaultImage,

		/** 产品图片 */
		productImage,

		/** 规格图片 */
		specification,

		/** 广告 */
		ad,

		/** 文章*/
		essay,

		/** 总分类*/
		category,

		/** 商品分类*/
		productCategory,

		/** 教师证书*/
		teacherCertification,

		/** 店铺动态 */
		shopNew,

		/** 店铺教程 */
		shopCourse,

		/** 主播头像 */
		anchorAvatar,

		/** 商家图片 */
		merchant,

		/** 配送方式 */
		shippingMethod,

		/** 直播礼物 */
		liveGift,

		/**头像*/
		avator,

		/**会员资料*/
		member,

		/**案例*/
		example,

		/**专栏*/
		specialColumn,

		/**课程*/
		course,

		/** 易问 */
		question,

		/** 易答 */
		answer,

		/** 资格证书 */
		qualification,

		/** 营业执照 */
		business,

		/** 语音 */
		media,

		/** 预告 */
		trailer,

		/** 背景图片 */
		background,

		/** 机器人 */
		robot,

		/**直播*/
		live;

		public static Map<String, imageType> map = new HashMap<>();

		static {
			map.put("机器人头像", robot);
			map.put("背景图片", background);
			map.put("文章", essay);
			map.put("总分类", category);
			map.put("提问问题", question);
			map.put("预告", trailer);
			map.put("语音", media);
			map.put("营业执照", business);
			map.put("资格证书", qualification);
			map.put("易问", question);
			map.put("易答", answer);
			map.put("课程", course);
			map.put("案例", example);
			map.put("专栏", specialColumn);
			map.put("教师证书", teacherCertification);
			map.put("默认", defaultImage);
			map.put("产品图片", productImage);
			map.put("规格图片", specification);
			map.put("广告", ad);
			map.put("商品分类", productCategory);
			map.put("头像", avator);
			map.put("店铺动态", shopNew);
			map.put("主播头像", anchorAvatar);
			map.put("商家图片", merchant);
			map.put("店铺教程", shopCourse);
			map.put("配送方式", shippingMethod);
			map.put("直播封面", live);
			map.put("直播礼物", liveGift);
			map.put("会员资料", member);

		}

		public static imageType forValue(String value) {
			return map.get(value);
		}

		@JsonValue
		public String toValue(){
			for (Map.Entry<String, imageType> entry:map.entrySet()){
				if(entry.getValue() == this){
					return entry.getKey();
				}
			}

			return "";
		}

		public static imageType getDefault(){
			return imageType.defaultImage;
		}
	}

	/**
	 * 标题
	 */
	private String title;

	/**
	 * 原图片
	 */
	private String source;

	/**
	 * 大图片
	 */
	private String large;

	/**
	 * 中图片
	 */
	private String medium;

	/**
	 * 缩略图
	 */
	private String thumbnail;

	/**
	 * 排序
	 */
	private Integer order;

	/**
	 * 文件
	 */
	private MultipartFile file;

	/**
	 * 获取标题
	 *
	 * @return 标题
	 */
	@Length(max = 200)
	public String getTitle() {
		return title;
	}

	/**
	 * 设置标题
	 *
	 * @param title
	 *            标题
	 */
	public void setTitle(String title) {
		this.title = title;
	}

	/**
	 * 获取原图片
	 *
	 * @return 原图片
	 */
	public String getSource() {
		return source;
	}

	/**
	 * 设置原图片
	 *
	 * @param source
	 *            原图片
	 */
	public void setSource(String source) {
		this.source = source;
	}

	/**
	 * 获取大图片
	 *
	 * @return 大图片
	 */
	public String getLarge() {
		return large;
	}

	/**
	 * 设置大图片
	 *
	 * @param large
	 *            大图片
	 */
	public void setLarge(String large) {
		this.large = large;
	}

	/**
	 * 获取中图片
	 *
	 * @return 中图片
	 */
	public String getMedium() {
		return medium;
	}

	/**
	 * 设置中图片
	 *
	 * @param medium
	 *            中图片
	 */
	public void setMedium(String medium) {
		this.medium = medium;
	}

	/**
	 * 获取缩略图
	 *
	 * @return 缩略图
	 */
	public String getThumbnail() {
		return thumbnail;
	}

	/**
	 * 设置缩略图
	 *
	 * @param thumbnail
	 *            缩略图
	 */
	public void setThumbnail(String thumbnail) {
		this.thumbnail = thumbnail;
	}

	/**
	 * 获取排序
	 *
	 * @return 排序
	 */
	@Min(0)
	@Column(name = "orders")
	public Integer getOrder() {
		return order;
	}

	/**
	 * 设置排序
	 *
	 * @param order
	 *            排序
	 */
	public void setOrder(Integer order) {
		this.order = order;
	}

	/**
	 * 获取文件
	 *
	 * @return 文件
	 */
	@Transient
	public MultipartFile getFile() {
		return file;
	}

	/**
	 * 设置文件
	 *
	 * @param file
	 *            文件
	 */
	public void setFile(MultipartFile file) {
		this.file = file;
	}

	/**
	 * 判断是否为空
	 *
	 * @return 是否为空
	 */
	@Transient
	public boolean isEmpty() {
		return (getFile() == null || getFile().isEmpty())
				&& (StringUtils.isEmpty(getSource()) || StringUtils.isEmpty(getLarge()) || StringUtils.isEmpty(getMedium()) || StringUtils.isEmpty(getThumbnail()));
	}

	/**
	 * 实现compareTo方法
	 *
	 * @param productImage
	 *            商品图片
	 * @return 比较结果
	 */
	public int compareTo(ProductImage productImage) {
		return new CompareToBuilder().append(getOrder(), productImage.getOrder()).toComparison();
	}

}